//#include<iostream>
//#include<list>
//using namespace std;
//struct ListNode {
//	int val;
//	ListNode* next;
//	ListNode() : val(0), next(nullptr) {}
//	ListNode(int x) : val(x), next(nullptr) {}
//	ListNode(int x, ListNode* next) : val(x), next(next) {}
//};
////////////1、创建新节点反转链表，可能造成内存泄漏
//ListNode* reverseList1(ListNode* head) {
//    ListNode* htp = head;
//    ListNode* tmp=nullptr;
//    while (htp != nullptr)
//    {
//        ListNode* newp = new  ListNode;
//        newp->val = htp->val;
//
//        if (htp == head)
//        {
//            newp->next = nullptr;
//            tmp = newp;
//        }
//        else
//        {
//            newp->next = tmp;
//            tmp = newp;
//        }
//        if (htp->next == nullptr)
//        {
//            head = newp;
//        }
//        htp = htp->next;
//
//    }
//    return head;
//}
//
///////////////////原地反转链表
//ListNode* reverseList2(ListNode* head) {
//    ListNode* prev = nullptr;
//    ListNode* current = head;
//    ListNode* next = nullptr;
//
//    while (current != nullptr) {
//        next = current->next;  // 保存下一个节点
//        current->next = prev;  // 反转指针
//        prev = current;        // 移动prev
//        current = next;        // 移动current
//    }
//
//    return prev;  // prev成为新的头节点
//}
//void printList(ListNode* head)
//{
//    while (head != nullptr)
//    {
//        cout << head->val << " ";
//        head=head->next;
//    }
//    cout << endl;
//}
//
//int main() {
//    // 创建测试链表: 1->2->3->4->5
//    ListNode* head = new ListNode(1);
//    head->next = new ListNode(2);
//    head->next->next = new ListNode(3);
//    head->next->next->next = new ListNode(4);
//    head->next->next->next->next = new ListNode(5);
//
//    cout << "原链表: ";
//    printList(head);
//
//    ListNode* fir = reverseList1(head);
//    ListNode* sec = reverseList2(head);
//
//    cout << "反转后: "<<endl;
//    printList(fir);
//    printList(sec);  // 应该输出: 5 4 3 2 1
//
//    return 0;
//}
